package com.itheima.nio.buffer.demo03;

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;

/**
 * 演示ByteBuffer读取数据
 */
public class ByteBufferDemo01 {

    public static void main(String[] args) throws Exception {

        // 1. 构建一个ByteBuffer对象
        ByteBuffer allocate = ByteBuffer.allocate(10);
        System.out.println(allocate);

        // 2. 添加数据
        String s = "abcdef" ;
        byte[] bytes = s.getBytes("UTF-8");
        allocate.put(bytes) ;

        System.out.println(allocate);

        // 3. 要进行读写转换（写  --->  读）
        // public ByteBuffer flip()		flip方法将Buffer从写模式切换到读模式。调用flip()方法会将position设回0，并将limit设置成之前position的值。
        allocate.flip();
        System.out.println(allocate);

        // 4. 读取数据
        /**
         * public byte get(int index)						读取指定索引处的字节
         * public byte get()								一次读取一个字节
         * public ByteBuffer get(byte[] dst)				将数据读取到字节数组中，数组的长度不能 > limit所在位置
         */
        // public byte get()								一次读取一个字节
//        System.out.println(allocate.get());
//        System.out.println(allocate);
//
//        System.out.println(allocate.get());
//        System.out.println(allocate);

        System.out.println("--------------------------------------------");

//        for(int  x = 0 ; x < allocate.limit() ; x++) {
//            System.out.print((char)allocate.get());      // 一次读取一个字节,每一次读取数据的时候pos向后移动一位
//        }

        // public byte get(int index)						读取指定索引处的字节
        // System.out.println((char)allocate.get(1));

//        for(int  x = 0 ; x < allocate.limit() ; x++) {
//            System.out.print((char)allocate.get(x));     // 一次读取一个字节,每一次读取数据的时候pos向后移动一位
//        }
        System.out.println(allocate);

        // public ByteBuffer get(byte[] dst)				将数据读取到字节数组中，数组的长度不能 > limit所在位置
//        byte[] result = new byte[6];
//        allocate.get(result) ;
//        System.out.println(new String(result));
//        System.out.println(allocate);

        System.out.println("--------------------------------------------");

        /**
         * public ByteBuffer rewind()		将position设置为0，可以实现重复读取
         * public ByteBuffer clear()		清除此缓冲区(数据还在)。位置设置为零，限制设置为容量。
         * public byte[] array()			将ByteBuffer转换成一个字节数组
         */

        // public ByteBuffer rewind()		将position设置为0，可以实现重复读取
//        allocate.rewind();
//        System.out.println(allocate);
//
//        for(int  x = 0 ; x < allocate.limit() ; x++) {
//            System.out.print((char)allocate.get());      // 一次读取一个字节,每一次读取数据的时候pos向后移动一位
//        }

        // public ByteBuffer clear()		清除此缓冲区(数据还在)。位置设置为零，限制设置为容量。
//        allocate.clear() ;
//        System.out.println(allocate);
//
//        System.out.println("-------------------------------------");
//
//        allocate.put((byte) 110) ;
//        System.out.println(allocate);
//
//        System.out.println(allocate.get(0));

        // public byte[] array()			将ByteBuffer转换成一个字节数组
        byte[] array = allocate.array();
        System.out.println(new String(array , 0 , allocate.limit()));

    }

}
